package com.base.cn.platform.os.service.course.book;

import com.base.cn.platform.os.entity.book.Book;
import com.base.cn.platform.os.entity.book.BookCondition;
import com.base.cn.platform.os.service.FeignAuthConfig;
import com.base.cn.platform.os.service.course.CourseBaseService;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 图书接口
 *
 * @author s.li
 * @create 2018-05-08-14:51
 */
@FeignClient(name = CourseBaseService.appName,configuration = FeignAuthConfig.class)
public interface BookService extends CourseBaseService {

    /**
     * 保存图书
     * @param book 图书实体对象
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/saveBook")
    Map<String,Object> saveBook(@RequestBody Map<String, Object> book);

    /**
     * 通过ID，查询图书对象
     * @param id 图书ID
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书对象
     */
    @RequestMapping(contextPath + "/findBookById")
    Map<String,Object> findBookById(@RequestParam("id") BigDecimal id,
                                    @RequestParam("setSubjectData") boolean setSubjectData,
                                    @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 通过ID串，查询图书列表
     * @param ids 图书ID串
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书Map
     */
    @RequestMapping(contextPath + "/findBookMapByIds")
    Map<BigDecimal,Map<String,Object>> findBookMapByIds(@RequestParam("ids") String ids,
                                                        @RequestParam("setSubjectData") boolean setSubjectData,
                                                        @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 通过ID串，查询图书Map
     * @param condition 查询条件
     * @return 图书Map
     */
    @RequestMapping(contextPath + "/findBookMap")
    Map<BigDecimal, Book> findBookMap(@RequestBody BookCondition condition);

    /**
     * 通过ID串，查询图书列表
     * @param ids 图书ID串
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书列表
     */
    @RequestMapping(contextPath + "/findBookListByIds")
    List<Map<String,Object>> findBookListByIds(@RequestParam("ids") String ids,
                                               @RequestParam("setSubjectData") boolean setSubjectData,
                                               @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 多条件查询图书列表
     * @param condition 查询条件
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书列表
     */
    @RequestMapping(contextPath + "/findBookList")
    List<Map<String,Object>> findBookList(@RequestBody Map<String, Object> condition,
                                          @RequestParam("setSubjectData") boolean setSubjectData,
                                          @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 分页查询图书
     * @param condition 查询条件
     * @param currentPage 页码
     * @param pageSize 页面显示量
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书列表
     */
    @RequestMapping(contextPath + "/findWebBookPage")
    Map<String,Object> findWebBookPage(@RequestBody Map<String, Object> condition,
                                       @RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage,
                                       @RequestParam(value = "pageSize", required = false, defaultValue = "10") int pageSize,
                                       @RequestParam("setSubjectData") boolean setSubjectData,
                                       @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 分页查询图书
     * @param condition 查询条件
     * @param currentPage 页码
     * @param setSubjectData 是否设置专业数据
     * @param selectAllColumn 是否是查询所有的列表
     * @return 图书列表
     */
    @RequestMapping(contextPath + "/findBookPage")
    Map<String,Object> findBookPage(@RequestBody Map<String, Object> condition,
                                    @RequestParam(value = "currentPage", required = false, defaultValue = "1") int currentPage,
                                    @RequestParam("setSubjectData") boolean setSubjectData,
                                    @RequestParam("selectAllColumn") boolean selectAllColumn);

    /**
     * 修改图书状态
     * @param ids 图书ID串
     * @param status 状态，0初始（可真删除），1上架，2下架，3删除
     * @return Map<String,Object>
     */
    @RequestMapping(contextPath + "/updateBookStatus")
    Map<String,Object> updateBookStatus(@RequestParam("ids") String ids,
                                        @RequestParam("status") int status);

    /**
     * 查询图书总数量数据
     * @return BookSumCount
     */
    @RequestMapping(contextPath + "/queryBookSumCount")
    Map<String,Integer> queryBookSumCount();

    /**
     * 修改图书库存
     * @param data
     * @return
     */
    @RequestMapping(contextPath + "/updateStockNum")
    Map updateStockNum(@RequestBody  List<Map<String,Object>> data);
}
